آموزش Kotlin Coroutines and Flow برای توسعه اندروید [2023]

Kotlin Coroutines and Flow for Android Development [2023]

نکته: آخرین آپدیت رو دریافت میکنید حتی اگر این محتوا بروز نباشد.
نمونه ویدیوها:
توضیحات دوره: راهنمای کامل! درک عمیقی از Kotlin Corutines و Flow برای استفاده موفقیت آمیز از آنها در برنامه های Android خود به کار ببرید. رایج ترین موارد استفاده برای Kotlin Coroutines and Flow را در Android پیاده سازی کنید. زمینه‌ها، کارکردهای داخلی، ) یاد بگیرید چگونه با استفاده از سازندگان Flow مختلف ایجاد کنید جریان‌ها را بیاموزید درباره اپراتورهای Flow (اپراتورهای چرخه حیات، اپراتورهای میانی، اپراتورهای پایانه) اطلاعاتی درباره انواع مختلف جریان‌ها (جریان‌های معمولی، SharedFlows، StateFlows) ایجاد کنید یک برنامه ردیابی زنده سهام با جریان‌ها یاد بگیرید که چه زمانی از کانال‌ها در توسعه Android استفاده کنید مزایای استفاده از Coroutines نسبت به Callbacks یا RxJava را بدانید. نحوه انجام درخواست های شبکه با Retrofit به صورت متوالی و همزمان. نحوه استفاده از Room همراه با Coroutines. پردازش پس زمینه با Coroutines. رسیدگی و لغو استثنا در کوروتین ها و جریان ها. نحوه نوشتن تست های واحد برای پیاده سازی های مبتنی بر کوروتین پیش نیازها: نیازی به دانش قبلی در مورد Kotlin Coroutine یا Flow نیست، با این حال باید با مبانی Kotlin و Android و همچنین برخی از اجزای Jetpack اندروید (ViewModels، LiveData، Room) آشنا باشید. و مقاوم سازی.

Google Kotlin Coroutines and Flow را به عنوان راه حل ترجیحی برای برنامه نویسی ناهمزمان در Android توصیه می کند. دیر یا زود، احتمالاً هر برنامه نویس Android با این موضوعات در تماس خواهد بود.


این دوره به شما درک عمیقی از Kotlin Coroutines و Flow می دهد و نحوه پیاده سازی رایج ترین موارد استفاده برای برنامه های Android را نشان می دهد.


این دوره از دو بخش بزرگ تشکیل شده است: بخش Coroutines و بخش Flow.

قبل از اینکه بتوانیم از Flow در برنامه های خود استفاده کنیم، ابتدا به درک کاملی از Coroutines نیاز داریم. به همین دلیل است که ابتدا Coroutine ها پوشش داده می شوند. با این حال، اگر قبلاً با Coroutines تجربه دارید، می‌توانید بلافاصله با قسمت Flow شروع کنید و هر زمان که لازم بود به درس‌های قسمت Coroutines بازگردید.


در قسمت مربوط به Coroutines، ابتدا نگاهی مفصل به مزایای Kotlin Coroutine نسبت به سایر رویکردهای برنامه نویسی ناهمزمان، مانند RxJava و Callbacks خواهیم داشت.


سپس، در مورد برخی از مبانی نظری صحبت خواهیم کرد. این موارد عبارتند از:

  • روالها در مقابل کارهای روزمره

  • توابع تعلیق

  • Coroutines در مقابل Threads

  • مسدود کردن در مقابل تعلیق

  • کوروتین های چند رشته ای

  • کارهای داخلی


در مرحله بعد، برخی از رایج ترین موارد استفاده برای Kotlin Coroutines را در برنامه های Android پیاده سازی می کنیم. این موارد عبارتند از:

  • انجام درخواست های شبکه با Retrofit به صورت متوالی و همزمان

  • اجرای مهلت زمانی و تلاش مجدد

  • استفاده از اتاق با کوروتین ها

  • انجام پردازش پس‌زمینه با Coroutines

  • ادامه اجرای Coroutine حتی زمانی که کاربر صفحه را ترک می‌کند.


برای بهبود تجربه یادگیری خود، این دوره همچنین شما را با چندین تمرین به چالش می کشد.


یادگیری برنامه‌های آموزشی می‌تواند طاقت‌فرسا باشد زیرا باید مفاهیم جدید زیادی را یاد بگیرید. با این حال، ما می خواهیم ساده شروع کنیم و با پیچیده تر شدن موارد استفاده ما، گام به گام با مفاهیم جدید آشنا خواهیم شد. این مفاهیم جدید عبارتند از:

  • Coroutine Builders (راه اندازی، ناهمگام، runBlocking)

  • زمینه Coroutine

  • Dispatchers Coroutine

  • همزمانی ساختاریافته

  • محدوده‌های کوروتین (viewModelScope، lifecycleScope، GlobalScope)

  • شغل و شغل سرپرست

  • توابع محدوده (coroutineScope{} و supervisorScope{})

  • لغو تعاونی

  • کد غیرقابل لغو


ما همچنین به بررسی Exception Handling خواهیم پرداخت و در مورد مفاهیمی مانند:

بحث خواهیم کرد
  • بررسی استثنا با try/catch

  • بررسی استثنا با CoroutineExceptionHandlers

  • چه زمانی از try/catch استفاده شود و چه زمانی از CoroutineExceptionHandler استفاده شود

  • بررسی استثنا در Coroutines با راه‌اندازی و ناهمگام‌سازی آغاز شد

  • مشخصات رسیدگی به استثناء توابع محدوده‌بندی coroutineScope{} و supervisorScope{}


تست های واحد برای هر پایگاه کد بسیار مهم هستند. در بخش پایانی دوره، آزمون‌های واحدی را برای اکثر موارد استفاده مبتنی بر روتین که قبلاً اجرا کردیم، خواهیم نوشت. در مورد مفاهیمی مانند

بحث خواهیم کرد
  • TestCoroutineDispatcher

  • ایجاد یک قانون JUnit4 برای آزمایش کد مبتنی بر کوروتین

  • runBlockingTest{} Coroutine Builder

  • زمان مجازی

  • آزمایش اجرای متوالی و همزمان

  • TestCoroutineScope


در قسمت مربوط به Kotlin Flow، ابتدا تمام اصول اولیه را پوشش می دهیم. ما به سوال "جریان چیست؟" پاسخ خواهیم داد. و سپس مزایا و معایب برنامه نویسی واکنشی را مورد بحث قرار می دهیم.


پس از آن، می‌خواهیم نگاهی به سازندگان و اپراتورهای مختلف Flow بیندازیم:

  • جریان سازهای پایه

  • اپراتورهای پایانه

  • اپراتور پایانه "launchIn()"

  • اپراتور پایانه "asLiveData()"

  • اپراتورهای چرخه حیات

  • اپراتورهای میانی


در اولین مورد واقعی Flow ما، ما از یک Flow برای ایجاد یک ویژگی ردیابی سهام زنده استفاده می‌کنیم که از تمام اجزای اصلی جریان موجود استفاده می‌کند.


در ماژول بعدی، نگاهی به مدیریت استثنا و لغو با Kotlin Flow خواهیم داشت.


در ماژول زیر، با StateFlow و SharedFlow و مفاهیم زیر آشنا خواهید شد:

  • چگونه با تابع تعلیق "repeatOnLifecycle()" Coroutines را از چرخه حیات آگاه کنیم

  • جریان های گرم در مقابل جریان های سرد

  • تبدیل جریان به SharedFlows با عملگر "shareIn()

  • تبدیل جریان ها به StateFlows با عملگر "stateIn()"

  • چه زمانی از SharedFlow و چه زمانی از StateFlow استفاده شود


در ادامه، با کانال‌ها، تفاوت آنها با جریان‌های داغ و زمانی که در برنامه‌های Android مفید هستند، آشنا می‌شوید.


در پایان این دوره، شما یک درک اساسی از Kotlin Coroutines و Flow خواهید داشت و می‌توانید برنامه‌های Android قابل خواندن و نگهداری، ناهمزمان و چند رشته‌ای بنویسید.


سرفصل ها و درس ها

معرفی Introduction

  • پیش نمایش دوره گسترده Extended Course Preview

  • ساختار و اهداف دوره Course Structure and Goals

  • نحوه دریافت کد منبع نمونه پروژه How to get the source code of the Sample Project

  • نحوه دریافت کد منبع نمونه پروژه How to get the source code of the Sample Project

  • راه اندازی اولیه پروژه نمونه Basic Setup of Sample Project

معرفی Introduction

  • پیش نمایش دوره گسترده Extended Course Preview

  • ساختار و اهداف دوره Course Structure and Goals

  • راه اندازی اولیه پروژه نمونه Basic Setup of Sample Project

رویکردهای مختلف برای برنامه نویسی ناهمزمان Different Approaches for Asynchronous Programming

  • بخش مقدمه Section Introduction

  • برنامه نویسی ناهمزمان چیست؟ What is Asynchronous Programming?

  • از توضیح موردی استفاده کنید Use Case Explanation

  • از توضیح موردی استفاده کنید Use Case Explanation

  • پیاده سازی برگشت به تماس Callback Implementation

  • پیاده سازی RxJava RxJava Implementation

  • پیاده سازی کوروتین ها Coroutines Implementation

  • مقایسه رویکردها Comparing Approaches

  • خلاصه Recap

رویکردهای مختلف برای برنامه نویسی ناهمزمان Different Approaches for Asynchronous Programming

  • بخش مقدمه Section Introduction

  • برنامه نویسی ناهمزمان چیست؟ What is Asynchronous Programming?

  • پیاده سازی برگشت به تماس Callback Implementation

  • پیاده سازی RxJava RxJava Implementation

  • پیاده سازی کوروتین ها Coroutines Implementation

  • مقایسه رویکردها Comparing Approaches

  • خلاصه Recap

مبانی کوروتین Coroutine Fundamentals

  • بخش مقدمه Section Introduction

  • روتین ها و کارهای روزمره Routines and Coroutines

  • روتین ها و کارهای روزمره Routines and Coroutines

  • توابع تعلیق Suspend Functions

  • کوروتین ها و موضوعات Coroutines and Threads

  • مسدود کردن در مقابل تعلیق Blocking VS Suspending

  • مسدود کردن در مقابل تعلیق Blocking VS Suspending

  • کوروتین های چند رشته ای Multithreaded Coroutines

  • کوروتین های چند رشته ای Multithreaded Coroutines

  • کارهای داخلی Internal Workings

  • () delay چگونه کار می کند How delay() works

  • خلاصه بخش Section Recap

مبانی کوروتین Coroutine Fundamentals

  • بخش مقدمه Section Introduction

  • توابع تعلیق Suspend Functions

  • کوروتین ها و موضوعات Coroutines and Threads

  • کارهای داخلی Internal Workings

  • () delay چگونه کار می کند How delay() works

  • خلاصه بخش Section Recap

انجام درخواست های شبکه به صورت متوالی Performing Network Requests sequentially

  • معرفی Introduction

  • معرفی Introduction

  • اضافه کردن Coroutine به پروژه شما Adding Coroutines to your project

  • اضافه کردن Coroutine به پروژه شما Adding Coroutines to your project

  • Coroutine Builders: راه اندازی و RunBlocking Coroutine Builders: Launch and RunBlocking

  • Coroutine Builders: راه اندازی و RunBlocking Coroutine Builders: Launch and RunBlocking

  • ایمنی اصلی Main-safety

  • مدیریت خطای اولیه با try-catch Basic error handling with try-catch

  • مدیریت خطای اولیه با try-catch Basic error handling with try-catch

  • تمرین 1 Exercise 1

  • تمرین 1 Exercise 1

  • تمرین 1: راه حل Exercise 1: Solution

  • تمرین 1: راه حل Exercise 1: Solution

  • خلاصه بخش Section Recap

انجام درخواست های شبکه به صورت متوالی Performing Network Requests sequentially

  • ایمنی اصلی Main-safety

  • خلاصه بخش Section Recap

انجام همزمان درخواست های شبکه Performing Network Requests concurrently

  • بخش مقدمه Section Introduction

  • شرح UseCase UseCase description

  • پیاده سازی UseCase#3 به صورت متوالی Implementing UseCase#3 in a sequential way

  • سازنده کوروتین async The async coroutine builder

  • پیاده سازی UseCase#3 به صورت همزمان Implementing UseCase#3 in a concurrent way

  • پیاده سازی UseCase#4 به صورت متوالی Implementing UseCase#4 in a sequential way

  • پیاده سازی UseCase#4 به صورت متوالی Implementing UseCase#4 in a sequential way

  • تمرین 2: پیاده سازی UseCase#4 به صورت همزمان Exercise 2: Implementing UseCase#4 in a concurrent way

  • تمرین 2: پیاده سازی UseCase#4 به صورت همزمان Exercise 2: Implementing UseCase#4 in a concurrent way

  • تمرین 2: راه حل Exercise 2: Solution

  • خلاصه بخش Section Recap

  • خلاصه بخش Section Recap

انجام همزمان درخواست های شبکه Performing Network Requests concurrently

  • بخش مقدمه Section Introduction

  • شرح UseCase UseCase description

  • پیاده سازی UseCase#3 به صورت متوالی Implementing UseCase#3 in a sequential way

  • سازنده کوروتین async The async coroutine builder

  • پیاده سازی UseCase#3 به صورت همزمان Implementing UseCase#3 in a concurrent way

  • تمرین 2: راه حل Exercise 2: Solution

  • خلاصه بخش Section Recap

توابع مرتبه بالاتر Higher-Order Functions

  • اجرای تایم اوت Implementing a timeout

  • در حال پیاده سازی تلاش های مجدد Implementing retries

  • منطق سعی مجدد را در تابع مرتبه بالاتر استخراج کنید Extract retry logic into higher order function

  • منطق سعی مجدد را در تابع مرتبه بالاتر استخراج کنید Extract retry logic into higher order function

  • برای امتحان مجدد، عقب نشینی نمایی را اضافه کنید Add exponential backoff to retry

  • تمرین 3: ترکیب تلاش های مجدد و تایم اوت Exercise 3: Combining retries and timeout

  • تمرین 3: راه حل Exercise 3: Solution

  • خلاصه بخش Section Recap

توابع مرتبه بالاتر Higher-Order Functions

  • اجرای تایم اوت Implementing a timeout

  • در حال پیاده سازی تلاش های مجدد Implementing retries

  • برای امتحان مجدد، عقب نشینی نمایی را اضافه کنید Add exponential backoff to retry

  • تمرین 3: ترکیب تلاش های مجدد و تایم اوت Exercise 3: Combining retries and timeout

  • تمرین 3: راه حل Exercise 3: Solution

  • خلاصه بخش Section Recap

استفاده از Room با Coroutines Using Room with Coroutines

  • بخش مقدمه Section Introduction

  • شرح UseCase UseCase description

  • شرح UseCase UseCase description

  • پیاده سازی UseCase UseCase Implementation

  • خلاصه بخش Section Recap

استفاده از Room با Coroutines Using Room with Coroutines

  • بخش مقدمه Section Introduction

  • پیاده سازی UseCase UseCase Implementation

  • خلاصه بخش Section Recap

پردازش پس زمینه با کوروتین ها Background Processing with Coroutines

  • بخش مقدمه Section Introduction

  • توضیح UseCase UseCase explanation

  • پیاده سازی در حال اجرا بر روی موضوع اصلی Implementation running on Main Thread

  • پیاده سازی در حال اجرا بر روی موضوع اصلی Implementation running on Main Thread

  • زمینه کوروتین Coroutine Context

  • زمینه کوروتین Coroutine Context

  • توزیع کنندگان کوروتین Coroutine Dispatchers

  • توزیع کنندگان کوروتین Coroutine Dispatchers

  • استفاده از withContext برای تغییر متن Using withContext for context switching

  • محدوده Coroutine در مقابل زمینه Coroutine Coroutine Scope VS Coroutine Context

  • تمرین 4: محاسبه را در چندین کوروتین انجام دهید Exercise4: Perform calculation in several Coroutines

  • تمرین 4: محاسبه را در چندین کوروتین انجام دهید Exercise4: Perform calculation in several Coroutines

  • تمرین 4: راه حل Exercise 4: Solution

  • تمرین 4: راه حل Exercise 4: Solution

  • تجزیه و تحلیل عملکرد Performance Analysis

  • خلاصه بخش Section Recap

پردازش پس زمینه با کوروتین ها Background Processing with Coroutines

  • بخش مقدمه Section Introduction

  • توضیح UseCase UseCase explanation

  • استفاده از withContext برای تغییر متن Using withContext for context switching

  • محدوده Coroutine در مقابل زمینه Coroutine Coroutine Scope VS Coroutine Context

  • تجزیه و تحلیل عملکرد Performance Analysis

  • خلاصه بخش Section Recap

همزمانی ساختاریافته و دامنه های کوروتین Structured Concurrency and Coroutine Scopes

  • بخش مقدمه Section Introduction

  • بخش مقدمه Section Introduction

  • مسیر ناخوشایند The unhappy path

  • همزمانی ساختاریافته Structured Concurrency

  • همزمانی ساختاریافته Structured Concurrency

  • محدوده های کوروتین Coroutine Scopes

  • ایجاد سلسله مراتب شغلی Building up the Job Hierarchy

  • والدین منتظر فرزندان هستند Parents wait for Children

  • والدین منتظر فرزندان هستند Parents wait for Children

  • لغو مشاغل والدین و فرزندان Cancellation of parent and child jobs

  • لغو مشاغل والدین و فرزندان Cancellation of parent and child jobs

  • شغل و شغل سرپرست Job and SupervisorJob

  • شغل و شغل سرپرست Job and SupervisorJob

  • همزمانی بدون ساختار Unstructured Concurrency

  • همزمانی بدون ساختار Unstructured Concurrency

  • GlobalScope GlobalScope

  • ViewModelScope ViewModelScope

  • ViewModelScope ViewModelScope

  • LifecycleScope LifecycleScope

  • LifecycleScope LifecycleScope

  • توابع محدوده‌بندی coroutineScope{} و supervisorScope{} Scoping Functions coroutineScope{} and supervisorScope{}

  • توابع محدوده‌بندی coroutineScope{} و supervisorScope{} Scoping Functions coroutineScope{} and supervisorScope{}

  • اجرای Coroutine را زمانی که کاربر صفحه را ترک کرد ادامه دهید Continue Coroutine execution when the user leaves the screen

  • اجرای Coroutine را زمانی که کاربر صفحه را ترک کرد ادامه دهید Continue Coroutine execution when the user leaves the screen

  • خلاصه بخش Section Recap

همزمانی ساختاریافته و دامنه های کوروتین Structured Concurrency and Coroutine Scopes

  • بخش مقدمه Section Introduction

  • مسیر ناخوشایند The unhappy path

  • محدوده های کوروتین Coroutine Scopes

  • ایجاد سلسله مراتب شغلی Building up the Job Hierarchy

  • GlobalScope GlobalScope

  • خلاصه بخش Section Recap

لغو کوروتین ها Coroutines Cancellation

  • لغو کوروتین ها Cancelling Coroutines

  • لغو تعاونی Cooperative Cancellation

  • کد غیر قابل لغو NonCancellable Code

  • همکاری UseCase10 در مورد لغو Making UseCase10 cooperative regarding cancellation

  • خلاصه بخش Section Recap

لغو کوروتین ها Coroutines Cancellation

  • لغو کوروتین ها Cancelling Coroutines

  • لغو تعاونی Cooperative Cancellation

  • کد غیر قابل لغو NonCancellable Code

  • همکاری UseCase10 در مورد لغو Making UseCase10 cooperative regarding cancellation

  • خلاصه بخش Section Recap

رسیدگی به موارد استثنایی Coroutines Exception Handling

  • بخش مقدمه Section Introduction

  • کنترل استثنایی با تلاش برای گرفتن Exception Handling with try-catch

  • کنترل استثنایی با تلاش برای گرفتن Exception Handling with try-catch

  • کنترل کننده استثناء کوروتین Coroutine Exception Handler

  • کنترل کننده استثناء کوروتین Coroutine Exception Handler

  • Try-Catch VS Coroutine Exception Handler Try-Catch VS Coroutine Exception Handler

  • Try-Catch VS Coroutine Exception Handler Try-Catch VS Coroutine Exception Handler

  • راه اندازی{} در مقابل همگام سازی{} launch{} VS async{}

  • راه اندازی{} در مقابل همگام سازی{} launch{} VS async{}

  • Exception Handling مشخصات coroutineScope{} Exception Handling specifics of coroutineScope{}

  • Exception Handling مشخصات supervisorScope{} Exception Handling specifics of supervisorScope{}

  • پیاده سازی UseCase13 با try-catch Implementation of UseCase13 with try-catch

  • پیاده سازی UseCase13 با try-catch Implementation of UseCase13 with try-catch

  • پیاده سازی UseCase13 با CoroutineExceptionHandler Implementation of UseCase13 with CoroutineExceptionHandler

  • پیاده سازی UseCase13 - نتایج را نشان می دهد حتی اگر یک برنامه کاری کودک شکست بخورد Implementation of UseCase13 - show results even if a child coroutine fails

  • بازگرداندن استثناهای لغو Rethrowing CancellationExceptions

  • بازگرداندن استثناهای لغو Rethrowing CancellationExceptions

  • برگه تقلب رسیدگی به استثناء Coroutines Coroutines Exception Handling Cheat Sheet

  • برگه تقلب رسیدگی به استثناء Coroutines Coroutines Exception Handling Cheat Sheet

  • بحث کنفرانس: رسیدگی به استثناء در Kotlin Coroutines Conference Talk: Exception Handling in Kotlin Coroutines

  • خلاصه بخش Section Recap

رسیدگی به موارد استثنایی Coroutines Exception Handling

  • بخش مقدمه Section Introduction

  • Exception Handling مشخصات coroutineScope{} Exception Handling specifics of coroutineScope{}

  • Exception Handling مشخصات supervisorScope{} Exception Handling specifics of supervisorScope{}

  • پیاده سازی UseCase13 با CoroutineExceptionHandler Implementation of UseCase13 with CoroutineExceptionHandler

  • پیاده سازی UseCase13 - نتایج را نشان می دهد حتی اگر یک برنامه کاری کودک شکست بخورد Implementation of UseCase13 - show results even if a child coroutine fails

  • بحث کنفرانس: رسیدگی به استثناء در Kotlin Coroutines Conference Talk: Exception Handling in Kotlin Coroutines

  • خلاصه بخش Section Recap

تست کوروتین ها Testing Coroutines

  • بخش مقدمه Section Introduction

  • اطلاعات مهم در رابطه با API های جدید kotlinx-coroutines-test 1.6 Important Information regarding the new kotlinx-coroutines-test 1.6 APIs

  • رویکرد تست واحد عمومی General Unit Testing Approach

  • رویکرد تست واحد عمومی General Unit Testing Approach

  • استفاده از TestCoroutineDispatcher برای اولین تست واحد Using the TestCoroutineDispatcher for our first unit test

  • استفاده از TestCoroutineDispatcher برای اولین تست واحد Using the TestCoroutineDispatcher for our first unit test

  • آزمایش مسیر ناخوشایند Testing the unhappy path

  • آزمایش مسیر ناخوشایند Testing the unhappy path

  • ایجاد یک قانون JUnit4 برای آزمایش کد مبتنی بر Coroutine Creating a JUnit4 Rule for Testing Coroutine-based code

  • ایجاد یک قانون JUnit4 برای آزمایش کد مبتنی بر Coroutine Creating a JUnit4 Rule for Testing Coroutine-based code

  • تمرین 5: یک تست واحد برای UseCase2 ایجاد کنید Excercise 5: Create a Unit Test for UseCase2

  • راه حل: تمرین 5 Solution: Exercise 5

  • runBlockingTest{} و VirtualTime runBlockingTest{} and VirtualTime

  • runBlockingTest{} و VirtualTime runBlockingTest{} and VirtualTime

  • تست اجرای متوالی و همزمان Testing sequential and concurrent execution

  • وقفه های آزمایشی (UseCase5) و تلاش های مجدد (UseCase 6) Testing Timeouts (UseCase5) and Retries (UseCase 6)

  • وقفه های آزمایشی (UseCase5) و تلاش های مجدد (UseCase 6) Testing Timeouts (UseCase5) and Retries (UseCase 6)

  • آزمایش پیاده سازی هایی که از Dispatchers.Default یا Dispatchers.IO استفاده می کنند Testing implementations that use Dispatchers.Default or Dispatchers.IO

  • TestCoroutineScope و کنترل اجرای Coroutine TestCoroutineScope and Controlling Coroutine Execution

  • خلاصه بخش Section Recap

تست کوروتین ها Testing Coroutines

  • بخش مقدمه Section Introduction

  • اطلاعات مهم در رابطه با API های جدید kotlinx-coroutines-test 1.6 Important Information regarding the new kotlinx-coroutines-test 1.6 APIs

  • تمرین 5: یک تست واحد برای UseCase2 ایجاد کنید Excercise 5: Create a Unit Test for UseCase2

  • راه حل: تمرین 5 Solution: Exercise 5

  • تست اجرای متوالی و همزمان Testing sequential and concurrent execution

  • آزمایش پیاده سازی هایی که از Dispatchers.Default یا Dispatchers.IO استفاده می کنند Testing implementations that use Dispatchers.Default or Dispatchers.IO

  • TestCoroutineScope و کنترل اجرای Coroutine TestCoroutineScope and Controlling Coroutine Execution

  • خلاصه بخش Section Recap

مبانی کاتلین فلو Basics of Kotlin Flow

  • بخش مقدمه Section Introduction

  • بخش مقدمه Section Introduction

  • جریان چیست؟ What is a Flow?

  • جریان چیست؟ What is a Flow?

  • برنامه نویسی واکنشی Reactive Programming

  • شروع اولین مورد استفاده از جریان Starting our first Flow Use Case

  • سازندگان جریان اصلی Basic Flow Builders

  • افشای یک جریان در منبع داده ما Exposing a Flow in our DataSource

  • افشای یک جریان در منبع داده ما Exposing a Flow in our DataSource

  • نمایش لیست سهام بر روی صفحه نمایش Displaying the stock list on the screen

  • اپراتورهای پایه پایه Basic Terminal operators

  • اپراتورهای پایه پایه Basic Terminal operators

  • اپراتور ترمینال "launchIn()" Terminal operator "launchIn()"

  • اپراتور ترمینال "launchIn()" Terminal operator "launchIn()"

  • استفاده از "launchIn()" در UseCase1 Using "launchIn()" in UseCase1

  • استفاده از "launchIn()" در UseCase1 Using "launchIn()" in UseCase1

  • اپراتورهای چرخه حیات Lifecycle Operators

  • اپراتور ترمینال "asLiveData()" Terminal operator "asLiveData()"

  • اپراتورهای متوسط ​​پایه Basic Intermediate Operators

  • تمرین: اپراتورهای متوسط Exercise: Intermediate Operators

  • راه حل تمرین Exercise Solution

  • خلاصه بخش Section Recap

  • اسلایدهای بخش Slides of the Section

مبانی کاتلین فلو Basics of Kotlin Flow

  • بخش مقدمه Section Introduction

  • برنامه نویسی واکنشی Reactive Programming

  • شروع اولین مورد استفاده از جریان Starting our first Flow Use Case

  • سازندگان جریان اصلی Basic Flow Builders

  • نمایش لیست سهام بر روی صفحه نمایش Displaying the stock list on the screen

  • اپراتورهای چرخه حیات Lifecycle Operators

  • اپراتور ترمینال "asLiveData()" Terminal operator "asLiveData()"

  • اپراتورهای متوسط ​​پایه Basic Intermediate Operators

  • تمرین: اپراتورهای متوسط Exercise: Intermediate Operators

  • راه حل تمرین Exercise Solution

  • خلاصه بخش Section Recap

  • اسلایدهای بخش Slides of the Section

کنترل و لغو استثناء جریان Flow Exception Handling and Cancellation

  • مدیریت استثناء جریان Flow Exception Handling

  • مدیریت استثناء جریان Flow Exception Handling

  • شفافیت استثنایی Exception Transparency

  • عملگر "retry()". The "retry()" Operator

  • تمرین: مدیریت استثناء جریان Exercise: Flow Exception Handling

  • راه حل تمرین Exercise Solution

  • لغو جریان Flow Cancellation

  • اسلایدهای بخش Slides of the Section

  • اسلایدهای بخش Slides of the Section

کنترل و لغو استثناء جریان Flow Exception Handling and Cancellation

  • شفافیت استثنایی Exception Transparency

  • عملگر "retry()". The "retry()" Operator

  • تمرین: مدیریت استثناء جریان Exercise: Flow Exception Handling

  • راه حل تمرین Exercise Solution

  • لغو جریان Flow Cancellation

  • اسلایدهای بخش Slides of the Section

StateFlow و SharedFlow StateFlow and SharedFlow

  • افشای جریان ها به جای LiveData در ViewModel Exposing Flows instead of LiveData in the ViewModel

  • رویکرد ساده لوح - افشای جریان های منظم Naive Approach - Exposing regular Flows

  • کوروتین های آگاه از چرخه حیات با "repeatOnLifecycle()" Lifecycle-aware Coroutines with "repeatOnLifecycle()"

  • جریان ها سرد هستند Flows are cold

  • SharedFlow ها داغ هستند SharedFlows are hot

  • SharedFlow ها داغ هستند SharedFlows are hot

  • تبدیل جریان به SharedFlows با "shareIn()" Converting Flows to SharedFlows with "shareIn()"

  • تبدیل جریان به SharedFlows با "shareIn()" Converting Flows to SharedFlows with "shareIn()"

  • زنده نگه داشتن جریان بالادست در طول تغییرات پیکربندی Keeping the upstream Flow alive during configuration changes

  • زنده نگه داشتن جریان بالادست در طول تغییرات پیکربندی Keeping the upstream Flow alive during configuration changes

  • پارامتر "بازپخش". The "replay" parameter

  • پارامتر "بازپخش". The "replay" parameter

  • StateFlow StateFlow

  • StateFlow StateFlow

  • تبدیل جریان ها به StateFlows با "stateIn()" Converting Flows to StateFlows with "stateIn()"

  • SharedFlow در مقابل StateFlow SharedFlow VS StateFlow

  • SharedFlow در مقابل StateFlow SharedFlow VS StateFlow

  • خلاصه بخش Section Recap

  • خلاصه بخش Section Recap

  • اسلایدهای بخش Slides of the Section

StateFlow و SharedFlow StateFlow and SharedFlow

  • افشای جریان ها به جای LiveData در ViewModel Exposing Flows instead of LiveData in the ViewModel

  • رویکرد ساده لوح - افشای جریان های منظم Naive Approach - Exposing regular Flows

  • کوروتین های آگاه از چرخه حیات با "repeatOnLifecycle()" Lifecycle-aware Coroutines with "repeatOnLifecycle()"

  • جریان ها سرد هستند Flows are cold

  • تبدیل جریان ها به StateFlows با "stateIn()" Converting Flows to StateFlows with "stateIn()"

  • خلاصه بخش Section Recap

  • اسلایدهای بخش Slides of the Section

کانال ها Channels

  • کانال های توسعه اندروید Channels for Android Development

  • کانال های توسعه اندروید Channels for Android Development

  • رویدادهای UI واحد Single UI Events

  • اسلایدهای بخش Slides of the Section

کانال ها Channels

  • رویدادهای UI واحد Single UI Events

  • اسلایدهای بخش Slides of the Section

جریان های همزمان Concurrent Flows

  • اطلاعات مهم Important Information

  • عملگر buffer(). The buffer() operator

  • عملگر buffer(). The buffer() operator

  • مقابله با فشار برگشتی (معروف به BufferOverflow) Dealing with Backpressure (aka BufferOverflow)

  • collectLatest()، mapLatest() و transformLatest() collectLatest(), mapLatest() and transformLatest()

  • عملگر conflate(). The conflate() operator

  • بافرها در SharedFlows و StateFlows Buffers in SharedFlows and StateFlows

  • بافرها در SharedFlows و StateFlows Buffers in SharedFlows and StateFlows

  • اسلایدهای بخش Slides of the Section

  • اسلایدهای بخش Slides of the Section

جریان های همزمان Concurrent Flows

  • اطلاعات مهم Important Information

  • مقابله با فشار برگشتی (معروف به BufferOverflow) Dealing with Backpressure (aka BufferOverflow)

  • collectLatest()، mapLatest() و transformLatest() collectLatest(), mapLatest() and transformLatest()

  • عملگر conflate(). The conflate() operator

  • اسلایدهای بخش Slides of the Section

با تشکر از شما و پاداش Thank you and Bonus

  • با تشکر از شما و پاداش Thank you and Bonus

با تشکر از شما و پاداش Thank you and Bonus

  • با تشکر از شما و پاداش Thank you and Bonus

نمایش نظرات

آموزش Kotlin Coroutines and Flow برای توسعه اندروید [2023]
جزییات دوره
16 hours
156
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
3,321
4.8 از 5
دارد
دارد
دارد
Lukas Lechner
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Lukas Lechner Lukas Lechner

برنامه نویس مستقل اندروید